Fly-Out-Menu
Ein Fly-Out-Mechanismus auf dem Selektionsbild mithilfe von HTML und entsprechenden Events. Fährt man mit der Maus über einen der drei angebotenen Kästen, so fährt der Docker-Control aus und zeigt eine Auswahl an optionen, die ins Selektionsbild übernommen werden können.
Beschreibung
Im folgenden Coding wird im Docker eine HTML-Seite angezeigt, die mittels des Javascript-Befehls OnMouseOver ein Event an SAP absetzt. Im SAP wird darauf mit einer Vergrößerung des Docking-Containers reagiert.
Wählt man einen Wert aus, so wird dieser in das Selektionsbild übernommen und der Docking-Container wird wieder verkleinert.
Ein OnMouseOver – OnMouseOut war leider nicht möglich, da beim Vergrößern des Docking-Containers automatisch ein “OnMouseOut” gesendet wird. Der Container würde also sofort wieder verkleinert, ohne dass man ein Auswahl treffen könnte.
Zusätzliche Info: Scrollbars
Mit diesem Zusatz im BODY-Tag ist es möglich, den – in diesem Fall – immer sichtbaren vertikalen Scrollbalken nur dann zu aktivieren, wenn er wirklich nötig ist:
<BODY style=”overflow:auto;”>
So sieht’s aus
So ist das Fly-Out-Menu eingeklappt. Der Benutzer sieht nur die “Kategorien”
Und hier wurde mit der Maus auf “Zahlen” gezeigt und das Menu klappt aus:
Coding
REPORT z_fly_out_menu.
*** Data
DATA: cl_docker TYPE REF TO cl_gui_docking_container.
CONSTANTS c_dock_open TYPE i VALUE 400.
CONSTANTS c_dock_close TYPE i VALUE 180.
*** Selection screen
PARAMETERS: p_field TYPE char10 DEFAULT ‘3333’.
INITIALIZATION.
PERFORM create_objects.
*———————————————————————-*
* CLASS lcl_event_receiver DEFINITION
*———————————————————————-*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: handle_sapevent
FOR EVENT sapevent OF cl_gui_html_viewer
IMPORTING action
frame
getdata
postdata
query_table.
ENDCLASS. “lcl_event_receiver DEFINITION
*———————————————————————-*
* CLASS lcl_event_receiver IMPLEMENTATION
*———————————————————————-*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_sapevent.
IF action+1 IS NOT INITIAL.
*** set value
p_field = action+1.
*** close docker
CALL METHOD cl_docker->set_extension
EXPORTING
extension = c_dock_close.
ELSE.
CASE action(1).
WHEN ‘1’.
*** Open Docker
CALL METHOD cl_docker->set_extension
EXPORTING
extension = c_dock_open.
WHEN ‘2’.
*** Close docker
CALL METHOD cl_docker->set_extension
EXPORTING
extension = c_dock_close.
ENDCASE.
ENDIF.
ENDMETHOD. “handle_sapevent
ENDCLASS. “lcl_event_receiver IMPLEMENTATION
*&———————————————————————*
*& Form CREATE_OBJECTS
*&———————————————————————*
FORM create_objects .
DATA: t_events TYPE cntl_simple_events,
wa_event LIKE LINE OF t_events,
event_receiver TYPE REF TO lcl_event_receiver,
t_html TYPE STANDARD TABLE OF text8192 WITH NON-UNIQUE DEFAULT KEY,
html LIKE LINE OF t_html,
url TYPE text1000,
zahl TYPE text10,
cl_html TYPE REF TO cl_gui_html_viewer.
*** create docker
CREATE OBJECT cl_docker
EXPORTING
extension = c_dock_close
side = cl_gui_docking_container=>dock_at_right
no_autodef_progid_dynnr = ‘X’.
*** create HTML
CREATE OBJECT cl_html
EXPORTING
parent = cl_docker.
*** Register SAPEVENT
CALL METHOD cl_html->get_registered_events
IMPORTING
events = t_events.
wa_event-eventid = cl_gui_html_viewer=>m_id_sapevent.
wa_event-appl_event = ‘X’.
READ TABLE t_events TRANSPORTING NO FIELDS
WITH KEY eventid = wa_event-eventid.
IF sy-subrc <> 0.
APPEND wa_event TO t_events.
ENDIF.
CALL METHOD cl_html->set_registered_events
EXPORTING
events = t_events.
SET HANDLER lcl_event_receiver=>handle_sapevent FOR cl_html.
*** Build HTML-Code
CONCATENATE ‘<html>’
‘<head><title>Test</title>’
‘<script type=”text/javascript”>’
‘ function OutOfSAPTimerStart(element) {‘
‘ location.href = “SAPEVENT:”+element;’
‘ }’
‘</script>’
‘</head>’
‘<body style=”overflow:auto;”>’ “Scroll bars auto”
‘<table border=”0″ width=”300px”>’
‘<tr><td onmouseover=”OutOfSAPTimerStart(”1”);” width=”150px” bgcolor=”#FF2200″><h1>Zahlen</h1></td>’
‘<td><p>Bitte wählen Sie eine Zahl aus!</p></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” Eins”);”><p>Eins</p></a></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” Zwei”);”><p>Zwei</p></a></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” Drei”);”><p>Drei</p></a></td></tr>’
‘<tr><td onmouseover=”OutOfSAPTimerStart(”1”);” bgcolor=”#22FF00″><h1>Zeichen</h1></td>’
‘<td><p>Bitte wählen Sie ein Zeichen aus!</p></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” A”);”><p>Ah</p></a></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” B”);”><p>Beh</p></a></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” C”);”><p>Ceh</p></a></td></tr>’
‘<tr><td onmouseover=”OutOfSAPTimerStart(”1”);” bgcolor=”#0022FF”><h1>Tiere</h1></td>’
‘<td><p>Bitte wählen Sie ein Tier aus!</p></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” Elefant”);”><p>Elefant</p></a></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” Maus”);”><p>Maus</p></a></td></tr>’
‘<td></td><td><a href=”#” onClick=”OutOfSAPTimerStart(” Hahn”);”><p>Hahn</p></a></td></tr>’
‘<tr height=”60px”><td><h1></h1></td>’
‘<tr><td><h1></h1></td>’
‘<td><a href=”#” onClick=”OutOfSAPTimerStart(”2”);”><p>Abbruch</p></a></td></tr>’
‘</table>’
‘</body>’
‘</html>’
INTO html.
APPEND html TO t_html.
*** load HTML
CALL METHOD cl_html->load_data
IMPORTING
assigned_url = url
CHANGING
data_table = t_html.
*** Show HTML page
CALL METHOD cl_html->show_url
EXPORTING
url = url.
ENDFORM. ” CREATE_OBJECTS
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024